#ifndef __GAMESCREEN_H__
#define __GAMESCREEN_H__

#include <list>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

#include <GL/glut.h>

#include "Game.h"
#include "Screen.h"
#include "Collidable.h"
#include "Score.h"
#include "TimedEvent.h"
#include "Terrain.h"
#include "Ball.h"
#include "GLFont.h"
#include "FollowCamera.h"
#include "MD2Model.h"
#include "SkyBox.h"
#include "Billboard.h"

/*
 * Classe: GameScreen
 *  Herda de: Screen, TimedEvent
 *
 *   Tela do jogo propriamente dito
 *
*/

class GameScreen : public Screen, public TimedEvent
{
  private:
          std::list<Collidable *> * collidableObjects;
          
          Score * sessionScore;
          
          FollowCamera * tc;
          
          Terrain * floor;
          SkyBox * sky;
          GLFont * f;
          MD2Model * ogro;
          
          double longtime;
          
          bool rotateLeft;
          bool rotateRight;
          bool moveForward;
          bool moveBackward;
          
  public:
         GameScreen( const char * stage );
         ~GameScreen();
         
         void display(double dt);
         
         void processFuncKeyDown(int key, int x1, int y1);
         void processFuncKeyUp(int key, int x, int y);
         void processKey(unsigned char key, int x, int y);
         
         void triggerEvent(int e);
};

#endif
